<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>深拷贝-递归实现深拷贝</title>
</head>

<body>
  <script>
    // 递归实现深拷贝 - 简版实现对象和数组的拷贝
    const obj = {
      name: '佩奇',
      family: {
        father: '猪爸爸'
      },
      hobby: ['跳泥坑', '唱歌'],
    }
    //步骤：1.封装。
    // 2.三元判断数组还是对象Array.isArray。
    // 3.for in遍历，记得返回。
    // 4.for in遍历里，记得if判断。简单赋值，复杂深度拷贝


    
    // 封装深拷贝函数 cloneDeep()
    function cloneDeep(data) {
      //首先判断下是数组还是对象
        const newObj=Array.isArray(data)?[]:{}
        // console.log(newobj)
      //for in遍历
      for(let k in data){
        
        if (typeof data[k]===`Object`) {
          //复杂数据类型拷贝
          newObj[k]=cloneDeep(data[k])
        } else {
          //还是简单数据类型拷贝
        newObj[k]=data[k]
        }
        
      }
      //判断的结果记得返回
      return newObj  
    }
    const res=cloneDeep(obj)
    res.family.father='猪大侠'
    console.log(res)
    console.log(obj)
  </script>
</body>

</html>